package com.szh.mysobproject.ui.activity

import android.graphics.Bitmap
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
import androidx.core.view.drawToBitmap
import androidx.core.view.isInvisible
import com.szh.mysobproject.R
import com.szh.mysobproject.app.AppActivity
import com.szh.mysobproject.util.dp
import com.szh.mysobproject.util.setFixOnClickListener

/**
 * @author : create by  szh
 * @date : 2022/8/18 9:57
 * @desc :自定义截图
 */


class ScreenshotActivity : AppActivity() {

    private val mBtnCrateScreenshot: Button by lazy { findViewById(R.id.btn_create_screenshot) }
    private val mIvScreenshot: ImageView by lazy { findViewById(R.id.iv_screenshot) }

    override fun getLayoutId(): Int = R.layout.screenshot_activity

    override fun initView() {

    }

    override fun initData() {

    }

    override fun initEvent() {
        mBtnCrateScreenshot.setFixOnClickListener {
            createQrCodeBitmap()  //生成截图
        }
    }

    private fun createQrCodeBitmap() {
        //加载布局
        val layout = LayoutInflater.from(this).inflate(R.layout.screenshot_card_layout, null)
        //将该布局隐藏，主要是防止用户看到，同时又不会影响布局的测量
        layout.isInvisible = true
        //实际上只要能添加到view 即可保证后面的 post 方法执行  decorView这个方法是获取顶级视图
        val decorView = window.decorView as ViewGroup
        //这里需要指定宽高，建议和布局中的一致，否则可能会留白太多
        decorView.addView(
            layout,
            ViewGroup.LayoutParams(200.dp, ViewGroup.LayoutParams.WRAP_CONTENT)
        )
        //需要View 布局添加完在执行截图操作 （因为我们制定了view的 宽高 不用再考虑view 的测量问题）
        layout.post {
            //config 参数为生成bitmap 的质量， 一般来说 Bitmap.Config.RGB_565 就够了，根据实际情况调整
            //drawToBitmap 为androidx.core.view 包下官方扩展函数
            val bitmap = layout.drawToBitmap(config = Bitmap.Config.RGB_565)
            //设置bitmap 到imageView 展示 真实开发直接保存为file 文件，然后分享
            set2FileAndShare(bitmap)
            //移除刚刚添加的 view （也可以不移除，以便进行复用，根据实际开发需求调整）
            decorView.removeView(layout)
        }
    }

    private fun set2FileAndShare(bitmap: Bitmap) {
        mIvScreenshot.setImageBitmap(bitmap)
    }
}